# -*- coding: utf-8 -*-


import sys
from PySide6.QtWidgets import *
from PySide6.QtGui import Qt
from PySide6.QtCore import QDate
from PySide6.QtSql import  QSqlQuery
from PySide6.QtCore import Signal, QFile, QIODevice

import os


class ItemFormClass(QDialog):
    """
    初始化ItemForm对话框。

    Args:
        parent (QWidget, optional): 父窗口对象。默认为None。

    Returns:
        无返回值，初始化对话框并设置其布局和控件。

    """
    def __init__(self, parent=None):
        super(ItemFormClass, self).__init__(parent)
        
        #设置默认id
        self.id="1"
        #设置默认文件路径
        self.fileName=""
              
        #设置窗口大小
        self.resize(320, 400)
        
        #对话框类型
        self.itemType = ""
        
        #设置和初始化收文时间
        self.dateLineEdit = QDateTimeEdit(QDate.currentDate(), self)
        self.dateLineEdit.setCalendarPopup(True)
        self.dateLineEdit.setDisplayFormat("yyyy-MM-dd")
        self.dateLineEdit.setFixedWidth(134)  # 设置固定宽度为134像素
        
        #设置其他字段
        self.titleLineEdit = QLineEdit()
        self.fileId = QLineEdit()
        self.number = QLineEdit()
        self.type = QLineEdit()
        self.unit = QLineEdit()
        self.file = QLineEdit()
        self.src = QLineEdit()
        
        # 设置文件路径标签：创建一个QToolButton来模仿标签，并设置其样式
        self.fileLabelButton = QToolButton(self)
        self.fileLabelButton.setText("&文件路径:")
        self.fileLabelButton.clicked.connect(self.file_pic_filter)
        
        # 创建按钮
        self.confirmButton = QPushButton('确认')
        self.cancelButton = QPushButton('取消')

       
        formLayout = QFormLayout()
        formLayout.addItem(QSpacerItem(10,10))
        formLayout.addRow("&时间:", self.dateLineEdit)
        formLayout.addRow("&文件序号:", self.fileId)
        formLayout.addRow("&文件标题:", self.titleLineEdit)
        formLayout.addRow("&文件文号:", self.number)
        formLayout.addRow("&文件类型:", self.type)
        formLayout.addRow("&单位:", self.unit)
        formLayout.addRow("&是否归档:", self.file)
        formLayout.addRow(self.fileLabelButton, self.src)
        formLayout.addItem(QSpacerItem(10,10))
        formLayout.addRow(self.confirmButton,self.cancelButton)
        
        
        # 模拟macStyle表单布局外观，但使用左对齐的标签
        formLayout.setRowWrapPolicy(QFormLayout.DontWrapRows)
        formLayout.setFieldGrowthPolicy(QFormLayout.FieldsStayAtSizeHint)
        formLayout.setFormAlignment(Qt.AlignHCenter | Qt.AlignTop)
        formLayout.setLabelAlignment(Qt.AlignLeft)
        formLayout.setSpacing(20)  # 设置布局中的间距为20像素
        
        self.setLayout(formLayout)
       
        # 连接按钮的点击信号到槽函数
        #确认
        self.confirmButton.clicked.connect(self.accept) # accept是QDialog的内置槽函数，用于关闭对话框
        #关闭
        self.cancelButton.clicked.connect(self.reject)  # reject是QDialog的内置槽函数，用于关闭对话框
    """
    设置ItemQDialog的标题。

    Args:
        title (str): 需要设置的标题字符串。

    Returns:
        None: 此函数没有返回值，但会更新对话框的标题。

    """
    def ItemQDialogTitle(self,title):
        self.setWindowTitle(title)
    """
    根据传入的字典对象设置UI组件的值。

    Args:
        obj (dict): 包含以下键的字典对象：
            - date (str): 日期字符串，格式为 "yyyy-MM-dd"。
            - id (str): 唯一标识符。
            - file_id (str): 文件ID。
            - title (str): 文件标题。
            - file_number (str): 文件编号。
            - file_type (str): 文件类型。
            - government_unit (str): 政府单位。
            - file (str): 文件内容。
            - src (str): 文件来源。

    Returns:
        None: 该函数不返回任何值，但会更新UI组件的值。

    """
    def setItems(self,obj={}):
        # 将字符串转换为 QDate 对象
        date_string = obj.get("date")
        date_format = "yyyy-MM-dd"  # 与您的日期字符串格式相匹配
        new_date = QDate.fromString(date_string, date_format)
        self.id = (obj.get("id"))        
        self.dateLineEdit.setDate(new_date)
        self.fileId.setText(obj.get("file_id"))
        self.titleLineEdit.setText(obj.get("title"))
        self.number.setText(obj.get("file_number"))
        self.type.setText(obj.get("file_type"))
        self.unit.setText(obj.get("government_unit"))
        self.file.setText(obj.get("file"))
        self.src.setText(obj.get("src"))
    """
    获取当前对象的属性值，并将其封装成一个字典返回。

    Args:
        无

    Returns:
        dict: 包含当前对象属性值的字典。

        字典中包含以下键值对：
        - id (str): 当前对象的id属性值
        - file_id (str): dateLineEdit文本框中的文本内容
        - title (str): titleLineEdit文本框中的文本内容
        - file_id (str): fileId文本框中的文本内容（注意：这里和file_id重复了，可能是个错误）
        - file_number (str): number文本框中的文本内容
        - file_type (str): type文本框中的文本内容
        - government_unit (str): unit文本框中的文本内容
        - file (str): file文本框中的文本内容
        - src (str): src文本框中的文本内容

    """                 
    def getItems(self):
        obj = {
            "id" : self.id,
            "file_id" : self.dateLineEdit.text(),
            "date" : self.dateLineEdit.text(),
            "title" : self.titleLineEdit.text(),
            "file_id" : self.fileId.text(),
            "file_number" : self.number.text(),
            "file_type" : self.type.text(),
            "government_unit" : self.unit.text(),
            "file" : self.file.text(),
            "src" : self.src.text()
        }
        return obj
    
    def file_pic_filter(self):
        
        # 使用QFileDialog打开文件对话框
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        self.fileName, _ = QFileDialog.getOpenFileName(self, "选择文件", "",
                                                 "All Files (*);;Text Files (*.txt)", options=options)
        
        target_dir = "."
        basename = os.path.basename(self.fileName)
        makePath = os.path.join(target_dir,"receivefile",self.dateLineEdit.text()+os.path.splitext(basename)[0])
        os.makedirs(makePath, exist_ok=True)

        target_file = os.path.join(makePath,basename)
        self.src.setText(target_file)
        

    def copy_file(self):
        if self.fileName=="":
            return
        fileName = self.fileName
        target_file = self.src.text()
        # 使用QFile和QFileDevice进行文件复制
        source_file = QFile(fileName)
        target_file_obj = QFile(target_file)

        if source_file.open(QIODevice.ReadOnly) and target_file_obj.open(QIODevice.WriteOnly):
            data = source_file.readAll()
            target_file_obj.write(data)

        source_file.close()
        target_file_obj.close()
          
if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = ItemFormClass()
    form.ItemQDialogTitle("新增数据")
    obj = {
        "id":"12",
        "file_id":"0025",
        "date":"2024-07-04",
        "title":"dsds",
        "file_number":"dsd",
        "file_type":"dsd",
        "government_unit":"sdsd",
        "file":"dsdsd",
        "src":"sdsdsdsd"
    }
    form.setItems(obj)
    form.show()

    sys.exit(app.exec())

